﻿using System.Linq;
using COMMON;
using VO;
using System.Collections.Generic;
using System.Data.Common;
using Microsoft.Practices.EnterpriseLibrary.Data;
using System.Data;

namespace DAL
{
    public class CampanhaStatusRegraDAL
    {

        private Database db;
        private DbTransaction transaction;

        #region Construtor
        public CampanhaStatusRegraDAL()
        {
            DaoFactory objFactory = new DaoFactory(Configuracao.ConnectionString());
            transaction = objFactory.transaction;
            db = objFactory.db;
        }
        #endregion

        #region Insert
        public void Insert(CampanhaStatusRegra obj)
        {
            using (var contexto = new CallcenterEntities())
            {
                var objC = new tbCCCampanhaStatus_Regra();
                objC = PopulaObjeto(obj, objC);
                contexto.AddTotbCCCampanhaStatus_Regra(objC);
                contexto.SaveChanges();
            }
        }
        #endregion

        #region Delete
        public void Delete(int idCampanhaStatus)
        {
            using (var contexto = new CallcenterEntities())
            {
                var campanha = (from campanhaAux in contexto.tbCCCampanhaStatus_Regra
                                where campanhaAux.idCampanhaStatus == idCampanhaStatus
                                select campanhaAux);

                foreach (var obj in campanha)
                {
                    contexto.DeleteObject(obj);
                }
                contexto.SaveChanges();
            }
        }
        #endregion

        #region Select
        public IList<CampanhaStatusRegra> Select(int idCampanhaStatus)
        {
            using (var contexto = new CallcenterEntities())
            {
                //IQueryable<tbCCCampanhaStatus_Regra> campanha;

                var campanha = (from campanhaAux in contexto.tbCCCampanhaStatus_Regra
                                join regraAux in contexto.tbCCRegraAtendimento on campanhaAux.idRegra equals regraAux.idRegraCallCenter
                                where campanhaAux.idCampanhaStatus == idCampanhaStatus
                                select new { campanhaAux.idCampanhaStatusRegra, campanhaAux.idCampanhaStatus, campanhaAux.idRegra, regraAux.NomeRegra, regraAux.DescricaoRegra });

                var list = new List<CampanhaStatusRegra>();
                foreach (var obj in campanha)
                {
                    var newObj = new CampanhaStatusRegra();
                    newObj.idCampanhaStatusRegra = obj.idCampanhaStatusRegra;
                    newObj.idCampanhaStatus = obj.idCampanhaStatus;
                    newObj.idRegra = obj.idRegra;
                    newObj.NomeRegra = obj.NomeRegra;
                    newObj.DescricaoRegra = obj.DescricaoRegra;
                    list.Add(newObj);
                }

                //Carrega lista
                //var list = PopulaObjeto(campanha);

                return list;
            }
        }
        #endregion

        #region CopiaStatusRegra
        public void CopiaStatusRegra(int idCampanha, int idCampanhaNova)
        {
            DbCommand dbCommand = db.GetStoredProcCommand("IN_RegraCampanha");
            db.AddInParameter(dbCommand, "idCampanha", DbType.Int32, idCampanha);
            db.AddInParameter(dbCommand, "idCampanhaNova", DbType.Int32, idCampanhaNova);
            db.ExecuteNonQuery(dbCommand);
        }
        #endregion

        #region PopulaObjeto
        protected static tbCCCampanhaStatus_Regra PopulaObjeto(CampanhaStatusRegra obj, tbCCCampanhaStatus_Regra tabela)
        {
            tabela.idCampanhaStatus = obj.idCampanhaStatus;
            tabela.idRegra = obj.idRegra;
            return tabela;
        }

        //protected static IList<CampanhaStatusRegra> PopulaObjeto(IQueryable<tbCCCampanhaStatus_Regra> reader)
        //{
        //    IList<CampanhaStatusRegra> list = new List<CampanhaStatusRegra>();
        //    foreach (var obj in reader)
        //    {
        //        var newObj = new CampanhaStatusRegra();
        //        newObj.idCampanhaStatusRegra = obj.idCampanhaStatusRegra;
        //        newObj.idCampanhaStatus = obj.idCampanhaStatus;
        //        newObj.idCampanha = obj.idCampanha;
        //        list.Add(newObj);
        //    }
        //    return list;
        //}
        #endregion

    }
}